enum KeyCode {
    KeyCode_BackSpace,
    KeyCode_Tab,
    KeyCode_Linefeed,
    KeyCode_Clear,
    KeyCode_Return,
    KeyCode_Pause,
    KeyCode_Scroll_Lock,
    KeyCode_Sys_Req,
    KeyCode_Escape,
    KeyCode_Delete,
    KeyCode_Multi_key,
    KeyCode_Codeinput,
    KeyCode_SingleCandidate,
    KeyCode_MultipleCandidate,
    KeyCode_PreviousCandidate,
    KeyCode_Home,
    KeyCode_Left,
    KeyCode_Up,
    KeyCode_Right,
    KeyCode_Down,
    KeyCode_Prior,
    KeyCode_Page_Up,
    KeyCode_Next,
    KeyCode_Page_Down,
    KeyCode_End,
    KeyCode_Begin,
    KeyCode_Select,
    KeyCode_Print,
    KeyCode_Execute,
    KeyCode_Insert,
    KeyCode_Undo,
    KeyCode_Redo,
    KeyCode_Menu,
    KeyCode_Find,
    KeyCode_Cancel,
    KeyCode_Help,
    KeyCode_Break,
    KeyCode_Mode_switch,
    KeyCode_script_switch,
    KeyCode_Num_Lock,
    KeyCode_KP_Space,
    KeyCode_KP_Tab,
    KeyCode_KP_Enter,
    KeyCode_KP_F1,
    KeyCode_KP_F2,
    KeyCode_KP_F3,
    KeyCode_KP_F4,
    KeyCode_KP_Home,
    KeyCode_KP_Left,
    KeyCode_KP_Up,
    KeyCode_KP_Right,
    KeyCode_KP_Down,
    KeyCode_KP_Prior,
    KeyCode_KP_Page_Up,
    KeyCode_KP_Next,
    KeyCode_KP_Page_Down,
    KeyCode_KP_End,
    KeyCode_KP_Begin,
    KeyCode_KP_Insert,
    KeyCode_KP_Delete,
    KeyCode_KP_Equal,
    KeyCode_KP_Multiply,
    KeyCode_KP_Add,
    KeyCode_KP_Separator,
    KeyCode_KP_Subtract,
    KeyCode_KP_Decimal,
    KeyCode_KP_Divide,
    KeyCode_KP_0,
    KeyCode_KP_1,
    KeyCode_KP_2,
    KeyCode_KP_3,
    KeyCode_KP_4,
    KeyCode_KP_5,
    KeyCode_KP_6,
    KeyCode_KP_7,
    KeyCode_KP_8,
    KeyCode_KP_9,
    KeyCode_F1,
    KeyCode_F2,
    KeyCode_F3,
    KeyCode_F4,
    KeyCode_F5,
    KeyCode_F6,
    KeyCode_F7,
    KeyCode_F8,
    KeyCode_F9,
    KeyCode_F10,
    KeyCode_F11,
    KeyCode_L1,
    KeyCode_F12,
    KeyCode_L2,
    KeyCode_F13,
    KeyCode_L3,
    KeyCode_F14,
    KeyCode_L4,
    KeyCode_F15,
    KeyCode_L5,
    KeyCode_F16,
    KeyCode_L6,
    KeyCode_F17,
    KeyCode_L7,
    KeyCode_F18,
    KeyCode_L8,
    KeyCode_F19,
    KeyCode_L9,
    KeyCode_F20,
    KeyCode_L10,
    KeyCode_F21,
    KeyCode_R1,
    KeyCode_F22,
    KeyCode_R2,
    KeyCode_F23,
    KeyCode_R3,
    KeyCode_F24,
    KeyCode_R4,
    KeyCode_F25,
    KeyCode_R5,
    KeyCode_F26,
    KeyCode_R6,
    KeyCode_F27,
    KeyCode_R7,
    KeyCode_F28,
    KeyCode_R8,
    KeyCode_F29,
    KeyCode_R9,
    KeyCode_F30,
    KeyCode_R10,
    KeyCode_F31,
    KeyCode_R11,
    KeyCode_F32,
    KeyCode_R12,
    KeyCode_F33,
    KeyCode_R13,
    KeyCode_F34,
    KeyCode_R14,
    KeyCode_F35,
    KeyCode_R15,
    KeyCode_Shift_L,
    KeyCode_Shift_R,
    KeyCode_Control_L,
    KeyCode_Control_R,
    KeyCode_Caps_Lock,
    KeyCode_Shift_Lock,
    KeyCode_Meta_L,
    KeyCode_Meta_R,
    KeyCode_Alt_L,
    KeyCode_Alt_R,
    KeyCode_Super_L,
    KeyCode_Super_R,
    KeyCode_Hyper_L,
    KeyCode_Hyper_R,
    KeyCode_space,
    KeyCode_exclam,
    KeyCode_quotedbl,
    KeyCode_numbersign,
    KeyCode_dollar,
    KeyCode_percent,
    KeyCode_ampersand,
    KeyCode_apostrophe,
    KeyCode_quoteright,
    KeyCode_parenleft,
    KeyCode_parenright,
    KeyCode_asterisk,
    KeyCode_plus,
    KeyCode_comma,
    KeyCode_minus,
    KeyCode_period,
    KeyCode_slash,
    KeyCode_0,
    KeyCode_1,
    KeyCode_2,
    KeyCode_3,
    KeyCode_4,
    KeyCode_5,
    KeyCode_6,
    KeyCode_7,
    KeyCode_8,
    KeyCode_9,
    KeyCode_colon,
    KeyCode_semicolon,
    KeyCode_less,
    KeyCode_equal,
    KeyCode_greater,
    KeyCode_question,
    KeyCode_at,
    KeyCode_A,
    KeyCode_B,
    KeyCode_C,
    KeyCode_D,
    KeyCode_E,
    KeyCode_F,
    KeyCode_G,
    KeyCode_H,
    KeyCode_I,
    KeyCode_J,
    KeyCode_K,
    KeyCode_L,
    KeyCode_M,
    KeyCode_N,
    KeyCode_O,
    KeyCode_P,
    KeyCode_Q,
    KeyCode_R,
    KeyCode_S,
    KeyCode_T,
    KeyCode_U,
    KeyCode_V,
    KeyCode_W,
    KeyCode_X,
    KeyCode_Y,
    KeyCode_Z,
    KeyCode_bracketleft,
    KeyCode_backslash,
    KeyCode_bracketright,
    KeyCode_asciicircum,
    KeyCode_underscore,
    KeyCode_grave,
    KeyCode_quoteleft,
    KeyCode_a,
    KeyCode_b,
    KeyCode_c,
    KeyCode_d,
    KeyCode_e,
    KeyCode_f,
    KeyCode_g,
    KeyCode_h,
    KeyCode_i,
    KeyCode_j,
    KeyCode_k,
    KeyCode_l,
    KeyCode_m,
    KeyCode_n,
    KeyCode_o,
    KeyCode_p,
    KeyCode_q,
    KeyCode_r,
    KeyCode_s,
    KeyCode_t,
    KeyCode_u,
    KeyCode_v,
    KeyCode_w,
    KeyCode_x,
    KeyCode_y,
    KeyCode_z,
    KeyCode_braceleft,
    KeyCode_bar,
    KeyCode_braceright,
    KeyCode_asciitilde,
    KeyCode_nobreakspace,
    KeyCode_exclamdown,
    KeyCode_cent,
    KeyCode_sterling,
    KeyCode_currency,
    KeyCode_yen,
    KeyCode_brokenbar,
    KeyCode_section,
    KeyCode_diaeresis,
    KeyCode_copyright,
    KeyCode_ordfeminine,
    KeyCode_guillemotleft,
    KeyCode_notsign,
    KeyCode_hyphen,
    KeyCode_registered,
    KeyCode_macron,
    KeyCode_degree,
    KeyCode_plusminus,
    KeyCode_twosuperior,
    KeyCode_threesuperior,
    KeyCode_acute,
    KeyCode_mu,
    KeyCode_paragraph,
    KeyCode_periodcentered,
    KeyCode_cedilla,
    KeyCode_onesuperior,
    KeyCode_masculine,
    KeyCode_guillemotright,
    KeyCode_onequarter,
    KeyCode_onehalf,
    KeyCode_threequarters,
    KeyCode_questiondown,
    KeyCode_Agrave,
    KeyCode_Aacute,
    KeyCode_Acircumflex,
    KeyCode_Atilde,
    KeyCode_Adiaeresis,
    KeyCode_Aring,
    KeyCode_AE,
    KeyCode_Ccedilla,
    KeyCode_Egrave,
    KeyCode_Eacute,
    KeyCode_Ecircumflex,
    KeyCode_Ediaeresis,
    KeyCode_Igrave,
    KeyCode_Iacute,
    KeyCode_Icircumflex,
    KeyCode_Idiaeresis,
    KeyCode_ETH,
    KeyCode_Eth,
    KeyCode_Ntilde,
    KeyCode_Ograve,
    KeyCode_Oacute,
    KeyCode_Ocircumflex,
    KeyCode_Otilde,
    KeyCode_Odiaeresis,
    KeyCode_multiply,
    KeyCode_Ooblique,
    KeyCode_Ugrave,
    KeyCode_Uacute,
    KeyCode_Ucircumflex,
    KeyCode_Udiaeresis,
    KeyCode_Yacute,
    KeyCode_THORN,
    KeyCode_Thorn,
    KeyCode_ssharp,
    KeyCode_agrave,
    KeyCode_aacute,
    KeyCode_acircumflex,
    KeyCode_atilde,
    KeyCode_adiaeresis,
    KeyCode_aring,
    KeyCode_ae,
    KeyCode_ccedilla,
    KeyCode_egrave,
    KeyCode_eacute,
    KeyCode_ecircumflex,
    KeyCode_ediaeresis,
    KeyCode_igrave,
    KeyCode_iacute,
    KeyCode_icircumflex,
    KeyCode_idiaeresis,
    KeyCode_eth,
    KeyCode_ntilde,
    KeyCode_ograve,
    KeyCode_oacute,
    KeyCode_ocircumflex,
    KeyCode_otilde,
    KeyCode_odiaeresis,
    KeyCode_division,
    KeyCode_oslash,
    KeyCode_ugrave,
    KeyCode_uacute,
    KeyCode_ucircumflex,
    KeyCode_udiaeresis,
    KeyCode_yacute,
    KeyCode_thorn,
    KeyCode_ydiaeresis
}
